/*
*
==============================================================================
*  Name        : 
*  Part of     : Omen Game Engine - OpenGL Plugin
*  Description : 
*  Version     : 1.0
*
*  Copyright (c) 2013 Lauri Kortevaara.
* 
==============================================================================
*/

// OpenGL 1.2 extension functions
PFNGLCOPYTEXSUBIMAGE3DPROC  glCopyTexSubImage3D = NULL;
PFNGLDRAWRANGEELEMENTSPROC  glDrawRangeElements  = NULL;
PFNGLTEXIMAGE3DPROC         glTexImage3D = NULL;
PFNGLTEXSUBIMAGE3DPROC      glTexSubImage3D = NULL;


// OpenGL 1.3 and above

// Texture activation
PFNGLACTIVETEXTUREPROC      glActiveTexture = NULL;
PFNGLCLIENTACTIVETEXTUREPROC glClientActiveTexture = NULL;

// Compressed Texture
PFNGLCOMPRESSEDTEXIMAGE1DPROC   glCompressedTexImage1D = NULL;
PFNGLCOMPRESSEDTEXIMAGE2DPROC   glCompressedTexImage2D = NULL;
PFNGLCOMPRESSEDTEXIMAGE3DPROC   glCompressedTexImage3D = NULL;

// Compressed Sub Texture
PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC    glCompressedTexSubImage1D = NULL;
PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC    glCompressedTexSubImage2D = NULL;
PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC    glCompressedTexSubImage3D = NULL;

// Get Compressed Texture Image
PFNGLGETCOMPRESSEDTEXIMAGEPROC  glGetCompressedTexImage = NULL;

// Transpose Matrix functions
PFNGLLOADTRANSPOSEMATRIXDPROC   glLoadTransposeMatrixd = NULL;
PFNGLLOADTRANSPOSEMATRIXFPROC   glLoadTransposeMatrixf = NULL;
PFNGLMULTTRANSPOSEMATRIXDPROC   glMultTransposeMatrixd = NULL;
PFNGLMULTTRANSPOSEMATRIXFPROC   glMultTransposeMatrixf = NULL;

PFNGLMULTITEXCOORD1DPROC    glMultiTexCoord1d = NULL;
PFNGLMULTITEXCOORD1DVPROC   glMultiTexCoord1dv = NULL;
PFNGLMULTITEXCOORD1FPROC    glMultiTexCoord1f = NULL;
PFNGLMULTITEXCOORD1FVPROC   glMultiTexCoord1fv = NULL;
PFNGLMULTITEXCOORD1IPROC    glMultiTexCoord1i = NULL;
PFNGLMULTITEXCOORD1IVPROC   glMultiTexCoord1iv = NULL;
PFNGLMULTITEXCOORD1SPROC    glMultiTexCoord1s = NULL;
PFNGLMULTITEXCOORD1SVPROC   glMultiTexCoord1sv = NULL;
PFNGLMULTITEXCOORD2DPROC    glMultiTexCoord2d = NULL;
PFNGLMULTITEXCOORD2DVPROC   glMultiTexCoord2dv = NULL;
PFNGLMULTITEXCOORD2FPROC    glMultiTexCoord2f = NULL;
PFNGLMULTITEXCOORD2FVPROC   glMultiTexCoord2fv = NULL;
PFNGLMULTITEXCOORD2IPROC    glMultiTexCoord2i = NULL;
PFNGLMULTITEXCOORD2IVPROC   glMultiTexCoord2iv = NULL;
PFNGLMULTITEXCOORD2SPROC    glMultiTexCoord2s = NULL;
PFNGLMULTITEXCOORD2SVPROC   glMultiTexCoord2sv = NULL;
PFNGLMULTITEXCOORD3DPROC    glMultiTexCoord3d = NULL;
PFNGLMULTITEXCOORD3DVPROC   glMultiTexCoord3dv = NULL;
PFNGLMULTITEXCOORD3FPROC    glMultiTexCoord3f = NULL;
PFNGLMULTITEXCOORD3FVPROC   glMultiTexCoord3fv = NULL;
PFNGLMULTITEXCOORD3IPROC    glMultiTexCoord3i = NULL;
PFNGLMULTITEXCOORD3IVPROC   glMultiTexCoord3iv = NULL;
PFNGLMULTITEXCOORD3SPROC    glMultiTexCoord3s = NULL;
PFNGLMULTITEXCOORD3SVPROC   glMultiTexCoord3sv = NULL;
PFNGLMULTITEXCOORD4DPROC    glMultiTexCoord4d = NULL;
PFNGLMULTITEXCOORD4DVPROC   glMultiTexCoord4dv = NULL;
PFNGLMULTITEXCOORD4FPROC    glMultiTexCoord4f = NULL;
PFNGLMULTITEXCOORD4FVPROC   glMultiTexCoord4fv = NULL;
PFNGLMULTITEXCOORD4IPROC    glMultiTexCoord4i = NULL;
PFNGLMULTITEXCOORD4IVPROC   glMultiTexCoord4iv = NULL;
PFNGLMULTITEXCOORD4SPROC    glMultiTexCoord4s = NULL;
PFNGLMULTITEXCOORD4SVPROC   glMultiTexCoord4sv = NULL;
PFNGLSAMPLECOVERAGEPROC     glSampleCoverage = NULL;


// OpenGL 1.4 and above
PFNGLBLENDCOLORPROC         glBlendColor = NULL;
PFNGLBLENDEQUATIONPROC      glBlendEquation = NULL;
PFNGLBLENDFUNCSEPARATEPROC  glBlendFuncSeparate = NULL;
PFNGLFOGCOORDPOINTERPROC    glFogCoordPointer = NULL;
PFNGLFOGCOORDDPROC          glFogCoordd = NULL;
PFNGLFOGCOORDDVPROC         glFogCoorddv = NULL;
PFNGLFOGCOORDFPROC          glFogCoordf = NULL;
PFNGLFOGCOORDFVPROC         glFogCoordfv = NULL;
PFNGLMULTIDRAWARRAYSPROC    glMultiDrawArrays = NULL;
PFNGLMULTIDRAWELEMENTSPROC  glMultiDrawElements = NULL;
PFNGLPOINTPARAMETERFPROC    glPointParameterf = NULL;
PFNGLPOINTPARAMETERFVPROC   glPointParameterfv = NULL;
PFNGLPOINTPARAMETERIPROC    glPointParameteri = NULL;
PFNGLPOINTPARAMETERIVPROC   glPointParameteriv = NULL;
PFNGLSECONDARYCOLOR3BPROC   glSecondaryColor3b = NULL;
PFNGLSECONDARYCOLOR3BPROC   glSecondaryColor3bv = NULL;
PFNGLSECONDARYCOLOR3DPROC   glSecondaryColor3d = NULL;
PFNGLSECONDARYCOLOR3DVPROC  glSecondaryColor3dv = NULL;
PFNGLSECONDARYCOLOR3FPROC   glSecondaryColor3f = NULL;
PFNGLSECONDARYCOLOR3FVPROC  glSecondaryColor3fv = NULL;
PFNGLSECONDARYCOLOR3IPROC   glSecondaryColor3i = NULL;
PFNGLSECONDARYCOLOR3IVPROC  glSecondaryColor3iv = NULL;
PFNGLSECONDARYCOLOR3SPROC   glSecondaryColor3s = NULL;
PFNGLSECONDARYCOLOR3SVPROC  glSecondaryColor3sv = NULL;
PFNGLSECONDARYCOLOR3UBPROC  glSecondaryColor3ub = NULL;
PFNGLSECONDARYCOLOR3UBVPROC glSecondaryColor3ubv = NULL;
PFNGLSECONDARYCOLOR3UIPROC  glSecondaryColor3ui = NULL;
PFNGLSECONDARYCOLOR3UIVPROC glSecondaryColor3uiv = NULL;
PFNGLSECONDARYCOLOR3USPROC  glSecondaryColor3us = NULL;
PFNGLSECONDARYCOLOR3USVPROC glSecondaryColor3usv = NULL;
PFNGLSECONDARYCOLORPOINTERPROC  glSecondaryColorPointer = NULL;
PFNGLWINDOWPOS2DPROC            glWindowPos2d = NULL;
PFNGLWINDOWPOS2DVPROC       glWindowPos2dv = NULL;
PFNGLWINDOWPOS2FPROC        glWindowPos2f = NULL;
PFNGLWINDOWPOS2FVPROC       glWindowPos2fv = NULL;
PFNGLWINDOWPOS2IPROC        glWindowPos2i = NULL;
PFNGLWINDOWPOS2IVPROC       glWindowPos2iv = NULL;
PFNGLWINDOWPOS2SPROC        glWindowPos2s = NULL;
PFNGLWINDOWPOS2SVPROC       glWindowPos2sv = NULL;
PFNGLWINDOWPOS3DPROC        glWindowPos3d = NULL;
PFNGLWINDOWPOS3DVPROC       glWindowPos3dv = NULL;
PFNGLWINDOWPOS3FPROC        glWindowPos3f = NULL;
PFNGLWINDOWPOS3FVPROC       glWindowPos3fv = NULL;
PFNGLWINDOWPOS3IPROC        glWindowPos3i = NULL;
PFNGLWINDOWPOS3IVPROC       glWindowPos3iv = NULL;
PFNGLWINDOWPOS3SPROC        glWindowPos3s = NULL;
PFNGLWINDOWPOS3SVPROC       glWindowPos3sv = NULL;

// OpenGL 1.5 and above
PFNGLGENQUERIESPROC         glGenQueries = NULL;
PFNGLDELETEQUERIESPROC      glDeleteQueries = NULL;
PFNGLISQUERYPROC            glIsQuery = NULL;
PFNGLBEGINQUERYPROC         glBeginQuery = NULL;
PFNGLENDQUERYPROC           glEndQuery = NULL;
PFNGLGETQUERYIVPROC         glGetQueryiv = NULL;
PFNGLGETQUERYOBJECTIVPROC   glGetQueryObjectiv = NULL;
PFNGLGETQUERYOBJECTUIVPROC  glGetQueryObjectuiv = NULL;
PFNGLBINDBUFFERPROC         glBindBuffer = NULL;
PFNGLDELETEBUFFERSPROC      glDeleteBuffers = NULL;
PFNGLGENBUFFERSPROC         glGenBuffers = NULL;
PFNGLISBUFFERPROC           glIsBuffer = NULL;
PFNGLBUFFERDATAPROC         glBufferData = NULL;
PFNGLBUFFERSUBDATAPROC      glBufferSubData = NULL;
PFNGLGETBUFFERSUBDATAPROC   glGetBufferSubData = NULL;
PFNGLMAPBUFFERPROC          glMapBuffer = NULL;
PFNGLUNMAPBUFFERPROC        glUnmapBuffer = NULL;
PFNGLGETBUFFERPARAMETERIVPROC glGetBufferParameteriv = NULL;
PFNGLGETBUFFERPOINTERVPROC  glGetBufferPointerv = NULL;

// OpenGL 2.0 and above (Shading language comes along at this stage)
PFNGLBLENDEQUATIONSEPARATEPROC  glBlendEquationSeparate = NULL;
PFNGLDRAWBUFFERSPROC            glDrawBuffers = NULL;
PFNGLSTENCILOPSEPARATEPROC      glStencilOpSeparate = NULL;
PFNGLSTENCILFUNCSEPARATEPROC    glStencilFuncSeparate  = NULL;
PFNGLSTENCILMASKSEPARATEPROC    glStencilMaskSeparate = NULL;
PFNGLATTACHSHADERPROC           glAttachShader = NULL;
PFNGLBINDATTRIBLOCATIONPROC     glBindAttribLocation  = NULL;
PFNGLCOMPILESHADERPROC          glCompileShader  = NULL;
PFNGLCREATEPROGRAMPROC          glCreateProgram  = NULL;
PFNGLCREATESHADERPROC           glCreateShader = NULL;
PFNGLDELETEPROGRAMPROC          glDeleteProgram = NULL;
PFNGLDELETESHADERPROC           glDeleteShader = NULL;
PFNGLDETACHSHADERPROC           glDetachShader = NULL;
PFNGLDISABLEVERTEXATTRIBARRAYPROC   glDisableVertexAttribArray  = NULL;
PFNGLENABLEVERTEXATTRIBARRAYPROC    glEnableVertexAttribArray  = NULL;
PFNGLGETACTIVEATTRIBPROC        glGetActiveAttrib  = NULL;
PFNGLGETACTIVEUNIFORMPROC       glGetActiveUniform  = NULL;
PFNGLGETATTACHEDSHADERSPROC     glGetAttachedShaders = NULL;
PFNGLGETATTRIBLOCATIONPROC      glGetAttribLocation  = NULL;
PFNGLGETPROGRAMIVPROC           glGetProgramiv = NULL;
PFNGLGETPROGRAMINFOLOGPROC      glGetProgramInfoLog  = NULL;
PFNGLGETSHADERIVPROC            glGetShaderiv = NULL;
PFNGLGETSHADERINFOLOGPROC       glGetShaderInfoLog  = NULL;
PFNGLGETSHADERSOURCEPROC        glGetShaderSource = NULL;
PFNGLGETUNIFORMLOCATIONPROC     glGetUniformLocation  = NULL;
PFNGLGETUNIFORMFVPROC           glGetUniformfv  = NULL;
PFNGLGETUNIFORMIVPROC           glGetUniformiv  = NULL;
PFNGLGETVERTEXATTRIBDVPROC      glGetVertexAttribdv  = NULL;
PFNGLGETVERTEXATTRIBFVPROC      glGetVertexAttribfv  = NULL;
PFNGLGETVERTEXATTRIBIVPROC      glGetVertexAttribiv  = NULL;
PFNGLGETVERTEXATTRIBPOINTERVPROC glGetVertexAttribPointerv  = NULL;
PFNGLISPROGRAMPROC              glIsProgram  = NULL;
PFNGLISSHADERPROC               glIsShader  = NULL;
PFNGLLINKPROGRAMPROC            glLinkProgram  = NULL;
PFNGLSHADERSOURCEPROC           glShaderSource  = NULL;
PFNGLUSEPROGRAMPROC             glUseProgram  = NULL;
PFNGLUNIFORM1FPROC              glUniform1f  = NULL;
PFNGLUNIFORM2FPROC              glUniform2f  = NULL;
PFNGLUNIFORM3FPROC              glUniform3f  = NULL;
PFNGLUNIFORM4FPROC              glUniform4f  = NULL;
PFNGLUNIFORM1IPROC              glUniform1i  = NULL;
PFNGLUNIFORM2IPROC              glUniform2i  = NULL;
PFNGLUNIFORM3IPROC              glUniform3i  = NULL;
PFNGLUNIFORM4IPROC              glUniform4i  = NULL;
PFNGLUNIFORM1FVPROC             glUniform1fv  = NULL;
PFNGLUNIFORM2FVPROC             glUniform2fv  = NULL;
PFNGLUNIFORM3FVPROC             glUniform3fv  = NULL;
PFNGLUNIFORM4FVPROC             glUniform4fv  = NULL;
PFNGLUNIFORM1IVPROC             glUniform1iv  = NULL;
PFNGLUNIFORM2IVPROC             glUniform2iv  = NULL;
PFNGLUNIFORM3IVPROC             glUniform3iv  = NULL;
PFNGLUNIFORM4IVPROC             glUniform4iv  = NULL;
PFNGLUNIFORMMATRIX2FVPROC       glUniformMatrix2fv  = NULL;
PFNGLUNIFORMMATRIX3FVPROC       glUniformMatrix3fv  = NULL;
PFNGLUNIFORMMATRIX4FVPROC       glUniformMatrix4fv  = NULL;
PFNGLVALIDATEPROGRAMPROC        glValidateProgram  = NULL;
PFNGLVERTEXATTRIB1DPROC         glVertexAttrib1d  = NULL;
PFNGLVERTEXATTRIB1DVPROC        glVertexAttrib1dv  = NULL;
PFNGLVERTEXATTRIB1FPROC         glVertexAttrib1f  = NULL;
PFNGLVERTEXATTRIB1FVPROC        glVertexAttrib1fv  = NULL;
PFNGLVERTEXATTRIB1SPROC         glVertexAttrib1s  = NULL;
PFNGLVERTEXATTRIB1SVPROC        glVertexAttrib1sv  = NULL;
PFNGLVERTEXATTRIB2DPROC         glVertexAttrib2d  = NULL;
PFNGLVERTEXATTRIB2DVPROC        glVertexAttrib2dv  = NULL;
PFNGLVERTEXATTRIB2FPROC         glVertexAttrib2f  = NULL;
PFNGLVERTEXATTRIB2FVPROC        glVertexAttrib2fv  = NULL;
PFNGLVERTEXATTRIB2SPROC         glVertexAttrib2s  = NULL;
PFNGLVERTEXATTRIB2SVPROC        glVertexAttrib2sv = NULL;
PFNGLVERTEXATTRIB3DPROC         glVertexAttrib3d  = NULL;
PFNGLVERTEXATTRIB3DVPROC        glVertexAttrib3dv  = NULL;
PFNGLVERTEXATTRIB3FPROC         glVertexAttrib3f  = NULL;
PFNGLVERTEXATTRIB3FVPROC        glVertexAttrib3fv  = NULL;
PFNGLVERTEXATTRIB3SPROC         glVertexAttrib3s  = NULL;
PFNGLVERTEXATTRIB3SVPROC        glVertexAttrib3sv  = NULL;
PFNGLVERTEXATTRIB4NBVPROC       glVertexAttrib4Nbv  = NULL;
PFNGLVERTEXATTRIB4NIVPROC       glVertexAttrib4Niv  = NULL;
PFNGLVERTEXATTRIB4NSVPROC       glVertexAttrib4Nsv  = NULL;
PFNGLVERTEXATTRIB4NUBPROC       glVertexAttrib4Nub  = NULL;
PFNGLVERTEXATTRIB4NUBVPROC      glVertexAttrib4Nubv  = NULL;
PFNGLVERTEXATTRIB4NUIVPROC      glVertexAttrib4Nuiv  = NULL;
PFNGLVERTEXATTRIB4NUSVPROC      glVertexAttrib4Nusv  = NULL;
PFNGLVERTEXATTRIB4BVPROC        glVertexAttrib4bv  = NULL;
PFNGLVERTEXATTRIB4DPROC         glVertexAttrib4d  = NULL;
PFNGLVERTEXATTRIB4DVPROC        glVertexAttrib4dv  = NULL;
PFNGLVERTEXATTRIB4FPROC         glVertexAttrib4f  = NULL;
PFNGLVERTEXATTRIB4FVPROC        glVertexAttrib4fv  = NULL;
PFNGLVERTEXATTRIB4IVPROC        glVertexAttrib4iv  = NULL;
PFNGLVERTEXATTRIB4SPROC         glVertexAttrib4s  = NULL;
PFNGLVERTEXATTRIB4SVPROC        glVertexAttrib4sv  = NULL;
PFNGLVERTEXATTRIB4UBVPROC       glVertexAttrib4ubv  = NULL;
PFNGLVERTEXATTRIB4UIVPROC       glVertexAttrib4uiv  = NULL;
PFNGLVERTEXATTRIB4USVPROC       glVertexAttrib4usv  = NULL;
PFNGLVERTEXATTRIBPOINTERPROC    glVertexAttribPointer = NULL;